package com.zrf.base.knowledge.leetcode.editor.cn;

import com.google.common.collect.Lists;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * //给定一个字符串数组，将字母异位词组合在一起。字母异位词指字母相同，但排列不同的字符串。
 * //
 * // 示例:
 * //
 * // 输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
 * //输出:
 * //[
 * //  ["ate","eat","tea"],
 * //  ["nat","tan"],
 * //  ["bat"]
 * //]
 * //
 * // 说明：
 * //
 * //
 * // 所有输入均为小写字母。
 * // 不考虑答案输出的顺序。
 * //
 * // Related Topics 哈希表 字符串
 * // 👍 514 👎 0
 *
 * @author zhouruifeng
 * @date 2020-11-13 07:21:34
 */
public class GroupAnagrams {
    public static void main(String[] args) {
        String[] strs = new String[] {"eat", "tea", "tan", "ate", "nat", "bat"};
        Solution solution = new GroupAnagrams().new Solution();
        System.out.println(solution.groupAnagrams(strs));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            Map<String, List<String>> resultMap = new HashMap<>();

            for (String str : strs) {
                String sortStr = sortStr(str);
                List<String> stringList = resultMap.get(sortStr);
                if (stringList == null) {
                    stringList = new ArrayList<>();
                    resultMap.put(sortStr, stringList);
                }
                stringList.add(str);
            }
            return new ArrayList<>(resultMap.values());
        }

        private String sortStr(String key) {
            char[] chars = key.toCharArray();
            Arrays.sort(chars);
            return String.valueOf(chars);
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}